/*
 * Classe Proteina
 *
 * Essa classe define as informações que definem uma proteina
 */
package epibot.EstruturasBiologicas;

import java.util.ArrayList;

/**
 *
 * @author Rafael Tosta
 */
public class Proteina {

    /**
     * Nome da proteina
     */
    private String codProteina;
    /**
     * Nome do site consultado
     */
    private String site;
    /**
     * Nome do alelo
     */
    private String alelo;
    /**
     * Tamanho da proteina
     */
    private String tamanho;
    /**
     * Armazena todos os epitos referente a proteina
     */
    private ArrayList<Epitopo> listaDeEpitopos;
    /**
     * Armazena o rank maximo
     */
    private Double maxScore;
    /**
     * Armazena o rank minimo
     */
    private Double minScore;
    /**
     * Armazena o fator de qualidade do site
     */
    private double notaDoSite;
    private String cabecalho;
    private int limiar = -1;

    /**
     * Construtor
     *
     * @param codProteina Código da proteina
     * @param site Nome do site
     * @param alelo Alelo
     * @param tamanho Tamanho do epitopo
     */
    public Proteina(String codProteina, String site, String alelo, String tamanho, double notaSite) {
        this.codProteina = codProteina;
        this.site = site;
        this.alelo = alelo;
        this.tamanho = tamanho;
        this.listaDeEpitopos = new ArrayList<Epitopo>();
        this.maxScore = 0.0;
        this.notaDoSite = notaSite;
    }

    public Proteina(String codProteina, String site, String alelo, String tamanho, double notaSite, String cabecalho) {
        this.codProteina = codProteina;
        this.site = site;
        this.alelo = alelo;
        this.tamanho = tamanho;
        this.listaDeEpitopos = new ArrayList<Epitopo>();
        this.maxScore = 0.0;
        this.notaDoSite = notaSite;
        this.cabecalho = cabecalho;
    }

    public void setCabecalho(String cabecalho) {
        this.cabecalho = cabecalho;
    }

    public String getCabecalho() {
        return cabecalho;
    }

    /**
     * Retorna o fator de qualidade do site
     *
     * @return fatorQ fator de qualidade
     */
    public double getNotaDoSite() {
        return this.notaDoSite;
    }

    public void setNotaDoSite(double notaDoSite) {
        this.notaDoSite = notaDoSite;
    }

    public void setSite(String site) {
        this.site = site;
    }

    public void setAlelo(String alelo) {
        this.alelo = alelo;
    }

    public void setTamanho(String tamanho) {
        this.tamanho = tamanho;
    }

    /**
     * Retorna a lista de epitopos
     *
     * @return listaDeEpitopos Lista de epitopos
     */
    public ArrayList<Epitopo> getListaDeEpitopos() {
        ArrayList<Epitopo> ep = new ArrayList<Epitopo>();

        if (limiar != -1) {
            for (int k = 0; k < limiar; k++) {
                // System.out.println(ep.get(k).getRank() + "," + ep.get(k).getNomeEpitopo());
                ep.add(listaDeEpitopos.get(k));
            }
            return ep;
        }

        return listaDeEpitopos;
    }

    public void setListaDeEpitopos(ArrayList<Epitopo> l) {
        this.listaDeEpitopos = new ArrayList<Epitopo>();
        this.listaDeEpitopos.addAll(l);
    }

    public void concatListaDeEpitopos(ArrayList<Epitopo> l) {
        this.listaDeEpitopos.addAll(l);
    }

    /**
     * Adiciona um Epitopo na lista de epitopos
     *
     * @param epitopo Epitopo
     */
    public void addEpitopo(Epitopo epitopo) {
        this.listaDeEpitopos.add(epitopo);
    }

    /**
     * Retorna o nome do alelo
     *
     * @return alelo Alelo
     */
    public String getAlelo() {
        return alelo;
    }

    /**
     * Retorna o código da proteina
     *
     * @return Código da proteína
     */
    public String getCodProteina() {
        return codProteina;
    }

    /**
     * Retorna o nome do site consultado
     *
     * @return Nome do site
     */
    public String getSite() {
        return site;
    }

    /**
     * Retorna o tamanho da proteina
     *
     * @return Tamanho do epítopo
     */
    public String getTamanho() {
        return tamanho;
    }

    /**
     * Armazena o score maximo e minimo de todos os epitopos
     *
     * @param maxScore Score máximo
     * @param minScore Score mínimo
     */
    public void setMaxMinScore(Double maxScore, Double minScore) {
        this.maxScore = maxScore;
        this.minScore = minScore;
    }

    /**
     * Retorna o score maximo
     *
     * @return Score máximo
     */
    public double getMaxScore() {
        return this.maxScore;
    }

    /**
     * Retorna o score minimo
     *
     * @return Score mínimo
     */
    public double getMinScore() {
        return this.minScore;
    }
}
